package com.yc.sakuralxm.uestcscanning

import android.app.Activity
import android.content.Context
import android.os.Build
import android.os.Handler
import android.support.multidex.MultiDex
import android.support.multidex.MultiDexApplication
import android.text.TextUtils
import android.util.DisplayMetrics
import android.view.Gravity
import android.widget.Toast

import com.facebook.drawee.backends.pipeline.Fresco
import com.yc.sakuralxm.uestcscanning.tools.L//import com.yc.sakuralxm.uestcscanning.tools.ListUtil;

//import okhttp3.OkHttpClient;

//import com.tencent.bugly.crashreport.CrashReport;


class AppContext : MultiDexApplication() {
    private var displayMetrics: DisplayMetrics? = null
    val user: String
        get() = "1"

    val appStartTime: Long = 0


    //    public User getUser() {
    //        return user;
    //    }


    val screenDensity: Float
        get() {
            if (this.displayMetrics == null) {
                setDisplayMetrics(resources.displayMetrics)
            }
            return this.displayMetrics!!.density
        }

    val screenHeight: Int
        get() {
            if (this.displayMetrics == null) {
                setDisplayMetrics(resources.displayMetrics)
            }
            return this.displayMetrics!!.heightPixels
        }

    val screenWidth: Int
        get() {
            if (this.displayMetrics == null) {
                setDisplayMetrics(resources.displayMetrics)
            }
            return this.displayMetrics!!.widthPixels
        }

    //获取应用的data/data/....File目录
    val filesDirPath: String
        get() = filesDir.absolutePath

    //    public ACache initaCache() {
    //        if (aCache == null) {
    //            aCache = ACache.get(this, APP_KEY);
    //        }
    //        return aCache;
    //    }

    //    public Map<String, String> getTokenMap() {
    //        Map<String, String> map = ListUtil.emptyHashMap();
    //        map.put("token", token);
    //        return map;
    //    }

    private val handler: Handler? = null

    private val count: Int = 0

    //    public void errorRegPhone() {
    //        if (handler == null) {
    //            handler = new Handler(Looper.getMainLooper()) {
    //                @Override
    //                public void handleMessage(Message msg) {
    //                    switch (msg.what) {
    //                        case 0://刷新显示时间,注册
    //                            if (count <= 0) {
    //                                if (callBack != null) {
    //                                    callBack.reset();
    //                                }
    //                            } else {
    //                                if (callBack != null) {
    //                                    callBack.hasCount(count);
    ////                                    L.i("count = " + count);
    //                                }
    //                                handler.sendEmptyMessageDelayed(0, 1000);
    //                            }
    //                            count--;
    //                            break;
    //                    }
    //                    super.handleMessage(msg);
    //                }
    //            };
    //        }
    //        count = 60;
    //        handler.sendEmptyMessage(0);
    //    }

    var token: String? = null
        get() = if (field == null) "" else field

    //    public void setUser(User user) {
    //        this.user = user;
    //    }


    //    private UploadManager uploadManager;
    private var uploadToken: String? = null

    //    public boolean unLogin() {
    //        return TextUtils.isEmpty(getToken()) || getUser() == null;
    //    }

    /**
     * @Description: 7牛上的key, 格式如：android/IMG/41/1454398420716.jpg
     */

    //    public boolean mustLogin(Context context) {
    //        if (unLogin()) {
    //            AppContext.getApp().showToastCenterShort("请您先登录");
    //            IntentUtil.startActivity(context, LoginActivity.class);
    //            return true;
    //        }
    //        return false;
    //    }

    //    public boolean mustLoginFor(ForResultActivity forResultActivity, int requstCode) {
    //        if (unLogin()) {
    //            AppContext.getApp().showToastCenterShort("请您先登录");
    //            Intent intent = new Intent(forResultActivity, LoginActivity.class);
    //            forResultActivity.startActivityForResult(intent, requstCode);
    //            return true;
    //        }
    //        return false;
    //    }

    //    public void recordLoginStatus(String pwd) {
    //        initaCache();
    //        aCache.put(USER_KEY, user);
    //        aCache.put("pwd", pwd);
    //    }

    //    public void clearUser() {
    //        user = null;
    //        netUserInfoChanged();
    //    }

    /**
     * 对于object来说，userInfo有变化
     *
     * @param iCallBack2
     * @return
     */
    //    private UserInfo userInfo;

    /**
     * 对于object来说，userInfo有变化
     *
     * @param object
     * @param iCallBack2
     * @return
     */
    //    public boolean isGetCurrentUser(Object object, final ISuccessCallBack<UserInfo> iCallBack2) {
    //        if (unLogin()) {
    //            return false;
    //        }
    //        String key = object.getClass().getName();
    //        if (!objectList.contains(key)) {
    //            objectList.add(key);
    //            if (userInfo != null) {
    //                iCallBack2.success(userInfo);
    //                return true;
    //            }
    //            //token	是	string	登陆令牌
    //            NetUtil2.postFrom("http://app-api.zm8090.com/index.php?g=Api&m=Login&a=getCurrentUser", getTokenMap(), new CallBack2<UserInfo>() {
    //                @Override
    //                public void failed(Object response, String msg) {
    //                    L.e("更新用户信息失败：" + msg);
    //                    iCallBack2.faild(msg);
    //                }
    //
    //                @Override
    //                public void success(JSONObject response, UserInfo t) {
    //                    L.i("更新用户信息成功");
    //                    userInfo = t;
    //                    if (userInfo != null && user != null) {
    //                        user.setUsername(userInfo.getUsername());
    //                        user.setMobile(userInfo.getMobile());
    //                        user.setXingzuan(userInfo.getXingzuan());
    //                        user.setHead_pic(userInfo.getHead_pic());
    //                    }
    //                    iCallBack2.success(userInfo);
    //                }
    //
    //                @Override
    //                public Class<UserInfo> getActualTypeClass() {
    //                    return UserInfo.class;
    //                }
    //            }, getApplicationContext());
    //            return true;
    //        }
    //        return false;
    //    }

    //    public void netUserInfoChanged() {
    //        objectList.clear();
    //        userInfo = null;
    //    }

    //    public UserInfo getUserInfo() {
    //        return userInfo;
    //    }

    private var toast: Toast? = null


    //    public void doAfterGetLocation(final Activity activity, final ISuccessCallBack<AMapLocation> callBack) {
    //        final AMapLocationClient locationClient = new AMapLocationClient(activity.getApplicationContext());
    //        AMapLocationClientOption locationOption = new AMapLocationClientOption();
    //        // 设置定位模式为低功耗模式
    //        locationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);
    //        // 设置定位监听
    //        locationClient.setLocationListener(new AMapLocationListener() {
    //            @Override
    //            public void onLocationChanged(final AMapLocation location) {
    //                L.e("为您切换到您所在的城市：" + location.getCity());
    //                activity.runOnUiThread(new Runnable() {
    //                    @Override
    //                    public void run() {
    //                        locationClient.stopLocation();
    //                        if (location == null) {
    //                            callBack.faild("没有获取到您的位置");
    //                        } else {
    //                            callBack.success(location);
    //                        }
    //                    }
    //                });
    //            }
    //        });
    //
    //        // 设置是否需要显示地址信息
    //        locationOption.setNeedAddress(true);
    //        // 设置是否开启缓存
    //        locationOption.setLocationCacheEnable(true);
    //        //设置是否等待设备wifi刷新，如果设置为true,会自动变为单次定位，持续定位时不要使用
    //        locationOption.setOnceLocationLatest(true);
    //        // 设置定位参数
    //        locationClient.setLocationOption(locationOption);
    //        locationClient.startLocation();
    //    }

    //    public void gotoLogin(Activity activity, String mobile, String pwd) {
    //        LogUtils.i(mobile + "====" + pwd);
    //        gotoLogin(activity, mobile, pwd, null);
    //    }

    //    public void gotoLogin(final Activity activity, final String mobile, final String pwd, final ISuccessCallBack<User> callBack) {
    //        AppContext.getApp().doAfterGetLocation(activity, new ISuccessCallBack<AMapLocation>() {
    //            @Override
    //            public void success(AMapLocation location) {
    //                login(mobile, pwd, callBack, location);
    //            }
    //
    //            @Override
    //            public void faild(String msg) {
    //                login(mobile, pwd, callBack, null);
    //            }
    //        });
    //    }

    //    private void login(String mobile, final String pwd, final ISuccessCallBack<User> callBack, AMapLocation location) {
    //        // 尝试调用登录接口
    //        Map<String, String> map = ListUtil.emptyHashMap();
    //        switch (Integer.parseInt(pwd)) {
    //            case 2:
    //                map.put("logintype", pwd);
    //                map.put("openid", AccessTokenKeeper.getQqOpenid(getApplicationContext()));
    //                map.put("access_token", AccessTokenKeeper.getQQAccessToken(getApplicationContext()));
    //                LogUtils.i("openid:" + AccessTokenKeeper.getQqOpenid(getApplicationContext()) + "access_token" + AccessTokenKeeper.getQQAccessToken(getApplicationContext()));
    //                break;
    //            case 1:
    ////               goWx();
    //                map.put("logintype", pwd);
    //                if (TextUtils.isEmpty(AccessTokenKeeper.getWxAccessToken(getApplicationContext())) || TextUtils.isEmpty(AccessTokenKeeper.getWxOpenid(getApplicationContext())))
    //                    return;
    //                map.put("openid", AccessTokenKeeper.getWxOpenid(getApplicationContext()));
    //                map.put("access_token", AccessTokenKeeper.getWxAccessToken(getApplicationContext()));
    //                break;
    //            case 3:
    //                map.put("logintype", pwd);
    //                map.put("openid", mAccessToken.getUid());
    //                map.put("access_token", mAccessToken.getToken());
    //                LogUtils.i("openid"+mAccessToken.getUid()+"accesstoken:"+mAccessToken.getToken());
    //                break;
    //            default:
    //                map.put("password", pwd);
    //        }
    //
    //        if (!TextUtils.isEmpty(mobile)) {
    //            map.put("mobile", mobile);
    //        } else {
    //
    //        }
    //        map.put("type", "1");
    //        map.put("version", Utils.getVersionCode(getApplicationContext()) + "");
    //        map.put("uuid", Utils.getIMEI(getApplicationContext()));
    //        double latitude = 0;
    //        double longitude = 0;
    //        if (location != null) {
    //            latitude = location.getLatitude();
    //            longitude = location.getLongitude();
    //            L.i("登录的city为" +  latitude+location.getCity()+ longitude);
    //            AppContext.getApp().aCacheLocation(location);
    //        } else {
    //            L.i("登录的location为" + null);
    //        }
    //        map.put("latitude", latitude + "");
    //        map.put("longitude", longitude + "");
    //        map.put("clientid", PushManager.getInstance().getClientid(this));
    //        NetUtil2.postFrom("http://app-api.zm8090.com/index.php?g=Api&m=Login&a=login", map, new CallBack2<User>() {
    //            @Override
    //            public void failed(Object o, String msg) {
    //                msg = NetUtil2.getErrorMsg(o, "网络不太好，请确认网络正常后重新登录");
    //                L.e(msg);
    ////                AppContext.getApp().showToastCenterShort(msg);
    //                if (callBack != null)
    //                    callBack.faild(msg);
    //            }
    //
    //            @Override
    //            public void success(JSONObject response, User u) {
    //                L.i("user = " + JSON.toJSONString(u));
    //                AppContext.getApp().loginSuccess(u, pwd);
    //                if (callBack != null)
    //                    callBack.success(u);
    //            }
    //
    //            @Override
    //            public Class<User> getActualTypeClass() {
    //                return User.class;
    //            }
    //        }, this);
    //    }

    /**
     * 获取好友信息
     * 简要描述：
     *
     *
     * 获取好友信息
     * 请求URL：
     *
     *
     * http://app-api.zm8090.com/index.php?g=Api&m=Friend&a=friend
     * 请求方式：
     *
     *
     * POST
     * 参数：
     *
     *
     * 参数名	必选	类型	说明
     * token	是	string	登陆令牌
     * uid	否	int	好友UID
     *
     * @param userId
     * @return
     */


    //    public void fanKuiMsg(String msg, String text) {
    //        if (Constant.NO_NETWORK.equals(msg)) {
    //            return;
    //        }
    //        StringBuilder sb = new StringBuilder();
    //        if (user != null) {
    //            sb.append("user：");
    //            sb.append(JSON.toJSONString(user));
    //            sb.append(Constant.SPLIT2);
    //        }
    //        sb.append("versionName：");
    //        sb.append(Utils.getVersionName(this));
    //        sb.append(Constant.SPLIT2);
    //        sb.append(text);
    //        //TODO 添加反馈信息
    //    }

    /**
     * 清理缓存
     *
     * @return
     */
    //    public Boolean clearACache() {
    ////                DataCleanManager2.clearAllCache(getContext());
    //        boolean isLogin = !unLogin();
    //        String pwd = null;
    //        if (isLogin) {
    //            pwd = initaCache().getAsString("pwd");
    //            RongIM.getInstance().clearMessages(Conversation.ConversationType.PRIVATE, user.getUid(), null);
    //        }
    //        DataCleanManager2.deleteDir(aCacheFile);
    //        aCacheFile.mkdirs();
    ////        if(ryFile != null)
    ////            DataCleanManager2.deleteDir(ryFile);
    //        RongIM.getInstance().clearConversations(null, Conversation.ConversationType.values());
    //        ImagePipeline imagePipeline = Fresco.getImagePipeline();
    //        imagePipeline.clearCaches();
    //        ImageLoader.getInstance().clearDiskCache();//清除sd卡
    //        if (pwd != null)
    //            AppContext.getApp().recordLoginStatus(pwd);
    ////        RongIM.getInstance().clearConversations();
    //        return true;
    //    }
    //
    //    private File aCacheFile = null;
    //    private File ryFile = null;
    //

    /**
     * 获取缓存大小
     *
     * @return
     */
    //    public String getACacheSize() {
    //        long cacheSize = Fresco.getImagePipelineFactory().getMainFileCache().getSize();//0.13.0
    ////        long cacheSize = Fresco.getImagePipelineFactory().getMainDiskStorageCache().getSize();//0.9.0
    //        L.i("Fresco cacheSize = " + cacheSize);
    //        try {
    //            if (ryFile != null && ryFile.exists()) {
    //                cacheSize += DataCleanManager2.getFolderSize(ryFile);
    //                cacheSize -= 143903;//现在的清除方法，还是会有大概143903的东西没有清除掉
    //                L.i("融云 cacheSize = " + cacheSize);
    //            } else {
    //                L.e("getACacheSize ryFile isnot exists");
    //            }
    //            cacheSize += DataCleanManager2.getFolderSize(aCacheFile);
    //            L.i("aCacheFile cacheSize = " + cacheSize);
    //            cacheSize += DataCleanManager2.getFolderSize(ImageLoader.getInstance().getDiskCache().getDirectory());
    //            L.i("ImageLoader cacheSize = " + cacheSize);
    //        } catch (Exception e) {
    //            e.printStackTrace();
    //        }
    //        return DataCleanManager2.getFormatSize(cacheSize);
    //    }

    /**
     * 登录成功回调
     *
     * @param user
     * @param pwd
     */
    //    public void loginSuccess(User user, String pwd) {
    //        setToken(user.getToken());
    //        setUser(user);
    //        recordLoginStatus(pwd);
    //        //登录成功后连接融云
    //        connectRongYun();
    //        //配置用户信息
    //        /**
    //         * 设置用户信息的提供者，供 RongIM 调用获取用户名称和头像信息。
    //         *
    //         * @param userInfoProvider 用户信息提供者。
    //         * @param isCacheUserInfo  设置是否由 IMKit 来缓存用户信息。<br>
    //         *                         如果 App 提供的 UserInfoProvider
    //         *                         每次都需要通过网络请求用户数据，而不是将用户数据缓存到本地内存，会影响用户信息的加载速度；<br>
    //         *                         此时最好将本参数设置为 true，由 IMKit 将用户信息缓存到本地内存中。
    //         * @see UserInfoProvider
    //         */
    //        RongIM.setUserInfoProvider(new RongIM.UserInfoProvider() {
    //
    //            @Override
    //            public io.rong.imlib.model.UserInfo getUserInfo(String userId) {
    //                return findUserById(userId);//根据 userId 去你的用户系统里查询对应的用户信息返回给融云 SDK。
    //            }
    //
    //        }, true);
    //        Model delModel = null;
    //        for (Model t : modelList) {
    //            if (user.getUid().equals(t.getUid())) {
    //                delModel = t;
    //                break;
    //            }
    //        }
    //        if (delModel != null) {
    //            modelList.remove(delModel);
    //        }
    ////        initRyFile();
    //    }

    /**
     * 保存当前位置
     *
     * @param location
     */
    //    public void aCacheLocation(AMapLocation location) {
    //        if (location != null && !TextUtils.isEmpty(location.getCity())) {
    //            initaCache().put("location", location.getCity());
    //            initaCache().put("latitude",location.getLatitude()+"");
    //            initaCache().put("longitude",location.getLongitude()+"");
    //        }
    //    }

    /**
     * @return 返回经纬度  其实可以直接返回map
     */
    //    public String getACacheLongitude(){
    //        return initaCache().getAsString("longitude");
    //    }
    //    public String getACachelatitude(){
    //        return initaCache().getAsString("latitude");
    //    }
    //    public String getACacheLocation() {
    //        return initaCache().getAsString("location");
    //    }


    //    public void exitApp(Activity activity) {
    //        modelList.clear();
    //        activity.finish();
    //        AutobahnHelper.Instance.disconnect();
    //        if (mainActivity != null)
    //            mainActivity.finish();
    //        Intent i = getBaseContext().getPackageManager()
    //                .getLaunchIntentForPackage(getBaseContext().getPackageName());
    //        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    //        startActivity(i);
    //    }

    private var mainActivity: Activity? = null


    private var theId = Integer.valueOf(java.lang.Long.toString(System.currentTimeMillis()).substring(4))!!

    //    private User user = null;
    //    private ACache aCache;
    //    private Oauth2AccessToken mAccessToken;
    //    private IWXAPI mIWXAPI;
    fun unLogin(): Boolean {
        return TextUtils.isEmpty(token) && user == null
    }

    override fun attachBaseContext(base: Context) {
        super.attachBaseContext(base)
        MultiDex.install(this)
    }
    //    private ACache aCache;
    //
    //    public ACache initaCache() {
    //        if (aCache == null) {
    //            aCache = ACache.get(this, APP_KEY);
    //        }
    //        return aCache;
    //    }

    init {
        mInstance = this
    }

    override fun onCreate() {
        super.onCreate()
        Fresco.initialize(this)
        //        initaCache();

        mInstance = this
        //        Tencent mTencent = Tencent.createInstance(Constant.APP_ID_QQ, getApplicationContext());
        //        mAccessToken = AccessTokenKeeper.readAccessToken(getApplicationContext());
        //        mIWXAPI = WXAPIFactory.createWXAPI(this, Constant.APP_ID_WX);
        //        mIWXAPI.registerApp(Constant.APP_ID_WX);
        /**
         * OnCreate 会被多个进程重入，这段保护代码，确保只有您需要使用 RongIMClient 的进程和 Push 进程执行了 init。
         * io.rong.push 为融云 push 进程名称，不可修改。
         */
        //            // This process is dedicated to LeakCanary for heap analysis.
        //            // You should not init your app in this process.
        //            return;
        //        }
        //        if(Constant.DEBUG||MainTabActivity.isChannelSurport()) {


        // TODO  这是个好东西 你总是没时间 你总是连内存都不去优化了

        //            LeakCanary.install(this);
    }

    fun setDisplayMetrics(DisplayMetrics: DisplayMetrics) {
        this.displayMetrics = DisplayMetrics
    }

    fun dp2px(f: Float): Int {
        return (0.5f + f * screenDensity).toInt()
    }

    fun px2dp(pxValue: Float): Int {
        return (pxValue / screenDensity + 0.5f).toInt()
    }
    //    private IMsgCallBack callBack;

    //    public void setMsgCallBack(IMsgCallBack callBack) {
    //        this.callBack = callBack;
    //    }

    fun getCount(): Int {
        L.i("count = " + count)
        return count
    }


    @Synchronized private fun clearUploadToken() {
        val lastUploadToken = uploadToken
        uploadToken = null
    }

    fun showToastCenterLong(msg: String) {
        if (toast == null)
            toast = Toast.makeText(this, msg, Toast.LENGTH_LONG)
        else
            toast!!.setText(msg)
        toast!!.setGravity(Gravity.CENTER, 0, 0)
        toast!!.show()
    }

    fun showToastCenterShort(msg: String) {
        if (toast == null)
            toast = Toast.makeText(this, msg, Toast.LENGTH_SHORT)
        else
            toast!!.setText(msg)
        toast!!.setGravity(Gravity.CENTER, 0, 0)
        toast!!.show()
    }

    fun setMainActivity(mainActivity: Activity) {
        this.mainActivity = mainActivity
    }

    fun getTheId(): Int {
        return theId++
    }

    companion object {
        protected var mInstance: AppContext? = null

        var sRunningOnIceCreamSandwich: Boolean = false

        init {
            sRunningOnIceCreamSandwich = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH
        }

        val app: AppContext
            get() {
                if (mInstance != null) {
                    return mInstance as AppContext
                } else {
                    mInstance = AppContext()
                    mInstance!!.onCreate()
                    return mInstance as AppContext
                }
            }

        //获取应用的data/data/....Cache目录
        //    public String getCacheDirPath() {
        //        reCacheDir().getAbsolutePath();
        //    }

        val APP_KEY = "yc_water"
        val USER_KEY = "user"


        //
        //   private  double   latitude  = 0;

        fun getmInstance(): AppContext? {
            return mInstance
        }

        fun setmInstance(mInstance: AppContext) {
            AppContext.mInstance = mInstance
        }
    }

    //    public double getLatitude() {
    //        return latitude;
    //    }
    //
    //    public void setLatitude(double latitude) {
    //        this.latitude = latitude;
    //    }
    //
    //    public double getLongitude() {
    //        return longitude;
    //    }
    //
    //    public void setLongitude(double longitude) {
    //        this.longitude = longitude;
    //    }
    //
    //    private double longitude = 0;
}